A computer system can receive, process and/or send information, including, for example, audio, video and multimedia information streams. When a transfer of information from a sending device to a receiving device is "asynchronous," the sending and receiving devices proceed independently until the sending device interrupts the receiving device to indicate the transfer is complete. Consider, for example, FIG. 1, which illustrates a known architecture for connecting an external Input/Output (IO) device 10 to a computer system 100. The IO device 10, such as a digital video camera acting as a sending device, may need to inform the computer system 100, acting as a receiving device, that a "record" mode has been selected. To do so, a single asynchronous message can be sent from the IO device 10 to the computer system 100 in response to the selection. Typically, an asynchronous transfer of information may be delayed by other, more important, activities. However, even a minor delay or gap in other types of information streams can noticeably degrade the quality of the information, such as by causing a momentary freeze in a video presentation or by introducing a stuttering effect in an audio transmission.
When a transfer of information is "synchronous," the sending and receiving devices are synchronized, such as by using the same clock signal, and the transfer of information re-occurs at identical periodic intervals. For example, the IO device 10 can send a synchronous message, indicating the camera's current mode, to the computer system 100 once every second. However, because the IO device 10 and the computer system 100, or components within the computer system 100, may be difficult to synchronize, a synchronous transfer of information may not be appropriate in some situations.
When a transfer of information is "isochronous," the sending and receiving devices are only partly synchronized, but the sending device transfers information to the receiving device at regular intervals. Such transfers can be used, for example, when information needs to arrive at the receiving device at the same rate it is sent from the sending device, but without precise synchronization of each individual data item. For example, the IO device 10 may send an isochronous stream of video information to the computer system 100 which ensures that the information flows continuously, and at a steady rate, in close timing with the ability of the computer system 100 to receive and display the video. While a synchronous transfer of information typically involves having each data transfer occur at the same time with respect to a clock signal, an isochronous transfer of information may require that up to "X" bits of data be transferred every "T" time units, although precisely when the X bits are transferred within the time T can vary. The IEEE 1394 standard (1995), entitled "High Performance Serial Bus," available from the Institute of Electrical and Electronic Engineers, is an example of an interface that supports the isochronous transfer of information.
There are several problems, however, with known methods of processing isochronous streams of information within a computer system. For example, the computer system 100 includes a processor 110 coupled to a main memory 200 through a memory controller 300. The external IO device 10 communicates with an IO unit 400 which is also coupled to the main memory 200 through the memory controller 300. The transfer of information between the memory controller 300 and the main memory 200 is asynchronous in nature. That is, even though information is transferred between the IO device 10 and the computer system 100 in an isochronous way, the information is treated in an asynchronous way within the computer system 100. For example, when an "agent," such as the processor 110, accesses the main memory 200, a delay or gap in an isochronous stream being sent from the IO device 10 to the main memory 200 can occur. If so, some of the benefits of using an isochronous stream of information, such as, for example, making sure that information flows continuously, and at a steady rate, in close timing with the ability of the computer system 100 to receive and display the image, are reduced or lost altogether.
To solve this problem, large data buffers may be provided for each isochronous device, or "agent," that communicates with the memory controller 300. Information being transferred, for example, between the IO device 10 and main memory 200 can be stored to, or retrieved from, such a buffer when the main memory 200 is not available. This can reduce the delays or gaps in an isochronous stream within the computer system 100, such as those caused by, for example, traditional cache management or memory arbitration. These large buffers can increase the cost and/or lower the performance of the computer system 100, especially if multiple IO devices, each having different bandwidth requirements, can transfer information, such as video or audio streams, with the main memory 200. Moreover, the memory controller 300 can be more difficult to build, validate and test--and unless these problems are solved the system still may not deliver information to or from memory in a reliable and timely fashion.
Even if there was a way to provide an isochronous stream of information to the main memory 200, the computer system 100 may receive several such streams. In this case, there is no easy way to merge the streams within the computer system to provide a single stream of isochronous information to the main memory 200, with or without asynchronous information.